package com.mall.user.domain.service;

import com.mall.user.domain.model.User;
import com.mall.user.domain.model.UserName;
import com.mall.user.domain.port.out.FindUserPort;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

/**
 * 用户领域服务
 * 处理用户相关的复杂业务逻辑
 */
@Slf4j
@Service
@RequiredArgsConstructor
public class UserDomainService {
    
    private final FindUserPort findUserPort;
    
    /**
     * 检查用户是否已存在
     * @param userName 用户名
     * @return 是否存在
     */
    public boolean checkUserExists(UserName userName) {
        log.debug("检查用户是否存在: {}", userName.name());
        return findUserPort.existsByUserName(userName);
    }
    
    /**
     * 根据用户名查找用户
     * @param userName 用户名
     * @return 用户信息，如果不存在返回null
     */
    public User findUserByName(UserName userName) {
        log.debug("根据用户名查找用户: {}", userName.name());
        return findUserPort.findByUserName(userName);
    }
    
    /**
     * 验证用户是否可以创建
     * @param user 待创建的用户
     * @return 是否可以创建
     */
    public boolean canCreateUser(User user) {
        if (user == null || user.getName() == null) {
            log.warn("用户信息不完整，无法创建");
            return false;
        }
        
        boolean exists = checkUserExists(user.getName());
        if (exists) {
            log.warn("用户已存在，无法创建: {}", user.getName().name());
            return false;
        }
        
        log.debug("用户可以创建: {}", user.getName().name());
        return true;
    }
}